﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YServer;
using ServerApp.Cache;
using ServerApp.DAO;

namespace ServerApp.Biz
{
    public class RoleBiz
    {
        AccountCache acCache = CacheFactory.accountCache;
        RoleCache roleCache = CacheFactory.roleCache;

        /// <summary>
        /// 角色登录
        /// </summary>
        /// <param name="token"></param>
        /// <returns>
        /// 0 登录成功 
        /// 1 该连接并没登录或没有创建账号
        /// 2 该账号没有角色
        /// 3 角色已登录
        /// </returns>
        public int RoleLogin(YToken token) {
            //根据连接获取账号id（若返回值为-10，则该连接并没登录或没有创建账号）
            int accid = acCache.GetAccIdByToken(token);
            if (accid == -10) { return 1; }

            //判断该账号是否已经有角色
            if (!roleCache.HasRole(accid)) { return 2; }

            //判断角色是否已登录
            if (roleCache.IsOnline(accid)) { return 3; }

            roleCache.RoleLogin(accid, token);
            return 0;
        }

        /// <summary>
        /// 创建角色
        /// </summary>
        /// <param name="token"></param>
        /// <param name="name"></param>
        /// <returns>
        /// 0 创建成功
        /// 1 该连接并没登录或没有创建账号
        /// 2 该账号已经拥有角色
        /// 3 角色名重复
        /// </returns>
        public int RoleCreateBiz(YToken token,string name) {
            //根据连接获取账号id（若返回值为-10，则该连接并没登录或没有创建账号）
            int accid = acCache.GetAccIdByToken(token);
            if (accid == -10) { return 1; }

            //判断账号是否已经有角色
            if (roleCache.HasRole(accid)) { return 2; }

            if (roleCache.HasRole(name)) { return 3; }

            //创建角色,返回0
            roleCache.RoleCreate(token, accid, name);
            //roleCache.RoleLogin(accid, token);
            return 0;
        }


        public Role GetRoleByToken(YToken token) {
            return roleCache.aid_roleDic[acCache.GetAccIdByToken(token)];
        }

        public void CloseBiz(YToken token) {
            roleCache.offline(acCache.GetAccIdByToken(token));
        }
    }
}
